module(..., package.seeall)

local nowPage = 0
--窗口管理栈
local uiHandle = {}
--当前分配的窗口ID
local pageId = 0

local function allocid()
    pageId = pageId + 1
    return pageId
end

local function loseFocus()
    if uiHandle[nowPage] and uiHandle[nowPage].onLoseFocus then
        uiHandle[nowPage].onLoseFocus()
    end
end

--- 新增一个窗口
-- @table wnd，窗口的元素以及消息处理函数表
-- @return number，窗口ID
-- @usage uiWin.add({onUpdate = refresh})
function add(moudle)
    --分配新的页面id
    local new_id = allocid()
    --注册改模块到ui管理表
    uiHandle[new_id] = moudle
    if moudle.PAGEID then
        moudle.PAGEID = new_id
    end
end

--- 打开一个已有的窗口
---@param package number @winId，窗口ID
---@param para string @加载页面传参
function openWin(pageId, para)
    if uiHandle[pageId] then
        if pageId ~= nowPage then
            if uiHandle[pageId].initPage then
                uiHandle[pageId].initPage(para)
                --上一个窗口执行失去焦点的处理函数
                loseFocus()
                nowPage = pageId
            end
        end
    else
        log.error("There is no this pageid:", pageId)
    end
end

--获取当前页面id
function currentPage()
    return nowPage
end

--key：自定义功能键
--value：自定义功能键的状态
local function onKey(value)
    if uiHandle[nowPage] and uiHandle[nowPage].onKey then
        uiHandle[nowPage].onKey(value)
    end
end

sys.subscribe("KEY_EVEN", onKey)


--[[
    开启一个线程相隔一秒调用进行页面刷新
]]
sys.taskInit(function()
    sys.wait(1000)
    while true do
        --当前页面是否有刷新函数
        if uiHandle[nowPage] and uiHandle[nowPage].refresh then
            --log.info("qiehuanfunc",topage)
            uiHandle[nowPage].refresh()
        end
        sys.wait(20)
    end
end)
